/**
 * 版权所有 2009-2012山东新北洋信息技术股份有限公司
 * 保留所有权利。
 */
package com.linyaonan.leetcode.easy._482;

import java.util.Locale;

/**
 * 给定一个密钥字符串S，只包含字母，数字以及 '-'（破折号）。N 个 '-' 将字符串分成了 N+1 组。给定一个数字 K，重新格式化字符串，除了第一个分组以外，每个分组要包含 K 个字符，第一个分组至少要包含 1 个字符。两个分组之间用 '-'（破折号）隔开，并且将所有的小写字母转换为大写字母。
 * <p>
 * 给定非空字符串 S 和数字 K，按照上面描述的规则进行格式化。
 * <p>
 * 示例 1：
 * <p>
 * 输入：S = "5F3Z-2e-9-w", K = 4
 * <p>
 * 输出："5F3Z-2E9W"
 * <p>
 * 解释：字符串 S 被分成了两个部分，每部分 4 个字符；
 *      注意，两个额外的破折号需要删掉。
 * 示例 2：
 * <p>
 * 输入：S = "2-5g-3-J", K = 2
 * <p>
 * 输出："2-5G-3J"
 * <p>
 * 解释：字符串 S 被分成了 3 个部分，按照前面的规则描述，第一部分的字符可以少于给定的数量，其余部分皆为 2 个字符。
 *  
 * <p>
 * 提示:
 * <p>
 * S 的长度不超过 12,000，K 为正整数
 * S 只包含字母数字（a-z，A-Z，0-9）以及破折号'-'
 * S 非空
 *
 * @ProjectName: leetcode
 * @Package: com.linyaonan.leetcode.easy._482
 * @ClassName: LicenseKeyFormatting
 * @Author: linyaonan
 * @Date: 2019/12/31 10:44
 */
public class LicenseKeyFormatting {

    public String licenseKeyFormatting(String S, int K) {
        StringBuilder sb = new StringBuilder();
        String[] split = S.split("-", -1);
        // 拼接为转大写的字符
        for (String s : split) {
            sb.append(s.toUpperCase(Locale.ROOT));
        }
        int l = sb.length();
        sb.reverse();
        int count = (int) Math.ceil((double) l / K);
        int offset = 0;
        for (int i = 1; i < count; i++) {
            sb.insert(i * K + offset, '-');
            offset++;
        }
        sb.reverse();
        return sb.toString();
    }
}
